#include<bits/stdc++.h>
using namespace std;

/*将平面上的点集S按x坐标排序后，若只有1个点，则返回；若有两个点，则直接计算两点距离为最近距离；若有三个点，则两两计算出距离，得到最近距离。

若大于三个点，则将其线性分割成大小大致相等的2个子集S1，S2。最近点对只会出现在以下三种情况中：①点对在子集S1中；②点对在子集S2中；③一个点在S1中，另一个点在S3中。

因此，递归地在S1，S2上解最近点对问题，分别得到S1，S2中的最小距离d1,d2，取d1,d2中的最小距离d和点对。再找出跨越S1，S2的最近点对：合并S1，S2找到点集中x坐标在区间[mid-d,mid+d]范围内的所有点。按y坐标不减排序，循环每个点，找它后面7个点的最小距离，与d比较，比d小则更新d。最后即求得最近点对距离。

*/

class solution{
    private:
        vector<pair<int,int>> v;
        int total;
    public:
        void init(){
            v.emplace_back(1,2);
            v.emplace_back(5,2);
            v.emplace_back(7,5);
            v.emplace_back(8,4);
            total = v.size();
        }
        double distance(pair<int,int> a,pair<int,int> b){
            return sqrt(abs(a.first-b.first)+abs(a.second-b.second));
        }

        int cpair(){
            if(total==1){
                return 0;
            }else if (total ==2)
            {
                return distance(v.begin(),v.end());
            }
            
        }
};

int main(){
    vector<pair<int,int>> v;
}